package com.example.tuShare.utils;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;

public class FileUtils {

    /**
     * 列出文件夹下的所有 CSV 文件，并修改文件名：将前两个字母移到末尾，并添加小数点。
     *
     * @param folderPath 文件夹路径
     * @return 修改后的文件名列表
     */
    public static List<String> listAndRenameCsvFiles(String folderPath) {
        try {
            return Files.list(Paths.get(folderPath))
                    .filter(path -> Files.isRegularFile(path) && path.toString().endsWith(".csv"))
                    .map(path -> {
                        String newFileName = modifyFileName(path.getFileName().toString()); // 修改文件名
                        renameFile(path, newFileName); // 重命名文件
                        return newFileName;
                    })
                    .collect(Collectors.toList());
        } catch (IOException e) {
            e.printStackTrace();
            return List.of();
        }
    }

    /**
     * 修改文件名：将前两个字母移到末尾，并添加小数点。
     *
     * @param fileName 文件名（带扩展名）
     * @return 修改后的文件名
     */
    private static String modifyFileName(String fileName) {
        // 确保文件名长度至少为 2
        if (fileName.length() < 2) {
            return fileName; // 如果文件名长度不足，直接返回
        }

        // 去掉 .csv 扩展名
        String fileNameWithoutExtension = fileName.replace(".csv", "");

        // 获取前两个字母并转换为大写
        String prefix = fileNameWithoutExtension.substring(0, 2).toUpperCase();
        // 获取剩余部分
        String remaining = fileNameWithoutExtension.substring(2);

        // 将前两个字母移到末尾，并添加小数点
        return remaining + "." + prefix+".csv" ; // 重新添加 .csv 扩展名
    }

    /**
     * 重命名文件
     *
     * @param filePath    文件路径
     * @param newFileName 新文件名
     */
    private static void renameFile(Path filePath, String newFileName) {
        try {
            Path newFilePath = filePath.resolveSibling(newFileName); // 获取新文件路径
            Files.move(filePath, newFilePath); // 重命名文件
            System.out.println("重命名文件: " + filePath.getFileName() + " -> " + newFileName);
        } catch (IOException e) {
            System.err.println("无法重命名文件: " + filePath.getFileName());
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String folderPath = "C:\\Users\\51297\\Desktop\\stockPath"; // 替换为你的文件夹路径
        List<String> newFileNames = listAndRenameCsvFiles(folderPath);
        System.out.println("修改后的文件名列表: " + newFileNames);
    }
}